Mac下 Docker 动态添加端口 您所在的位置:网站首页 mac 目录映射 Mac下 Docker 动态添加端口

Mac下 Docker 动态添加端口

2024-07-17 08:26| 来源: 网络整理| 查看: 265

目录

一、原理

二、新增端口

1、查看container id

2、进入配置文件

3、进入screen

4、修改文件内容

4.1 修改config.v2.json

4.2 修改hostconfig.json

5、退出screen

三、查看新增结果

四、Mac下 Docker 动态添加端口常遇问题及处理

一、原理

Docker 动态添加端口的原理是使用 Docker 的 expose 命令来指定容器暴露的端口,但并不会自动将容器内部的端口与宿主机的端口进行映射。这时需要使用 docker run 命令的 -p 参数来手动将容器内部的端口映射到宿主机的端口。

具体流程如下:

在 Dockerfile 中使用 EXPOSE 命令指定容器将要暴露的端口,如:EXPOSE 80/tcp。构建镜像并启动容器。使用 docker ps 命令查看容器的信息,包括容器 ID 和端口映射信息。使用 docker port 命令可以查看容器内部端口映射到宿主机的端口。如果需要动态添加端口,可以使用 docker commit 命令对容器进行快照,然后使用 docker run 命令的 -p 参数将容器内部的端口映射到宿主机的端口上。

总的来说,Docker 动态添加端口的实现主要依赖于 Docker 自身的端口暴露和端口映射功能。

二、新增端口

发现开放的端口不够用了,但是还不想重新创建容器咋整

1、查看container id

不管是使用docker ps,docker ps -a,docker inspect containerName哪种方式先获得容器的id,这里我使用inspect

docker inspect  jenkinsdemo | grep Id

返回的信息如下:

"Id": "64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf",

或者使用可视化docker直接点击:

便可直接跳出容器id,并进入容器:

2、进入配置文件

Mac下Docker容器的配置文件在~/Library/Containers/com.docker.docker目录

cd ~/Library/Containers/com.docker.docker

需要修改的文件在Data/vms/0下

cd Data/vms/0 3、进入screen

在~/Library/Containers/com.docker.docker/Data/vms/0目录下有一个tty文件,在终端键入screen tty进行登录,此时会进入一个screen空白窗口,回车即可

注:如果出现screen is terminating这个提示,请参照下面操作:

docker run -it --privileged --pid=host justincormack/nsenter1

执行上面命令,啥也不要改,第一次执行会进入容器终端,接着执行

cd /var/lib/docker/containers && ls

此时我们会看到一些文件夹:

64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf fdd17afcb6c7fcb78cfc1626935641059476a464cc4de5e1b7db74a9802db3b6

我们使用①中获取的container id,进入到对应的目录

cd 64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf && ls

此时可以看到如下内容:

64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf-json.log checkpoints config.v2.json hostconfig.json hostname hosts mounts resolv.conf resolv.conf.hash 4、修改文件内容

接着修改config.v2.json和hostconfig.json文件对应的端口映射部分

4.1 修改config.v2.json

通过vi找到要修改的关键字ExposedPorts,

原先的内容如下:

ExposedPorts":{"50000/tcp":{},"8080/tcp":{}},

那我们要增加暴露的8000端口,那么就是配置如下:

ExposedPorts":{"50000/tcp":{},"8080/tcp":{},"8000/tcp":{}},

修改完之后保存该文件

4.2 修改hostconfig.json

通过vi找到要修改的关键字PortBindings 原先的内容为

"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"8082"}]},

那我们要增加8000端口映射到主机的8000端口,那么配置如下:

"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"8082”}]},"8000/tcp":[{"HostIp":"","HostPort":"8000"}]}

修改完之后保存该文件

5、退出screen

输入ctrl+a+c(先按ctrl,再按a,然后按c即可)

三、查看新增结果

命令查看:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64f7c751e5df jenkins/jenkins "/sbin/tini -- /usr/…" 2 weeks ago Up 19 hours 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 50000/tcp, 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp jenkinsdemo

 可视化docker查看:

四、Mac下 Docker 动态添加端口常遇问题及处理

在Mac下使用Docker时,可能会遇到动态添加端口的问题。这通常是由于Mac的网络环境与Docker的网络环境不同所导致的。以下是处理该问题的步骤:

确认Docker容器内的端口映射是否正确。可以使用docker port ;container_name>命令来查看。

确认Mac的防火墙是否允许端口访问。可以使用sudo lsof -i:;port_number>命令来检查端口是否被占用,并且确认Mac的防火墙是否允许该端口访问。

确认Mac的网络环境是否与Docker的网络环境有冲突。如果Mac的网络环境与Docker的网络环境不同,可能会导致端口无法访问。这时可以尝试使用docker run --net=host命令启动容器,让容器共享Mac的网络环境。

确认Docker的端口映射是否正确。在Docker中使用-p ;host_port>:;container_port>命令来映射端口,确保端口映射的正确性。

如果以上步骤仍然无法解决问题,可以尝试重新启动Docker服务或重启Mac电脑。

总之,处理Mac下Docker动态添加端口的问题需要进行多方面的排查和分析,对于不同的情况可能需要采用不同的解决方案。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有